home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / comm / misc / zvm1_19.lha / zvm.doc < prev    next >
Text File  |  1993-04-24  |  41KB  |  965 lines

  1. /* $Header: pd:zvmRCS/zvm.doc,v 1.6 1993/04/19 18:40:06 rvillari Exp rvillari $ */
  2.  
  3. PLEASE READ THE HISTORY SECTION AT THE END OF THIS FILE IF YOU'VE USED
  4. THIS PROGRAM BEFORE!!!
  5.  
  6. THERE IS A NEW REQUIRED ASSIGN (VOICETEMP:).  SEE THE INSTALLATION
  7. INSTRUCTIONS AGAIN.
  8.  
  9. IF YOU'VE USED THIS PROGRAM BEFORE AND YOU WANT TO KEEP YOUR OLD
  10. MESSAGES, MAKE SURE YOU UNARCHIVE THIS IN A DIFFERENT DIRECTORY THAN
  11. YOUR OLD ONE, THEN COPY THE NEW FILES TO VOICE:.  THIS RELEASE CONTAINS
  12. EMPTY MESSAGES FOR EACH OF THE MESSAGES THAT NEEDS TO BE CUSTOMIZED.
  13.  
  14. --------------------------------------------------------------------------
  15.  
  16. DESCRIPTION
  17.  
  18. This is ZVM 1.19, a voice module that CAN be used with GPFax2.21+
  19. (GPFax is not required!).  In short, it allows you to use your ZyXEL
  20. modem as an answering machine.  You can retrieve your messages
  21. remotely and locally, play messages through the modem's internal
  22. speaker, through the telephone line, or through the Amiga's sound
  23. system.  It also detects when a fax is calling up and lets GPFax
  24. handle the call.
  25.  
  26. It has a fully gadgetized user interface.  All the keyboard shortcuts
  27. work now!
  28.  
  29. It has an AREXX port.  And you can program the way ZVM handles a call,
  30. handles a fax, or handles a 'silent answer' situation.  Given all the
  31. arexx commands available, you should be able to make your own
  32. voicemail system.  Since there is no tutorial, you will most likely
  33. have to learn how to program the system by example (that's how I do
  34. most of my Amiga programming).  Hopefully, when I have more time, I
  35. will take the time out to actually write a tutorial on how to use the
  36. arexx functions I provide.  Note that there is a section in this .doc
  37. file which describes the functions.
  38.  
  39. REQUIREMENTS
  40.  
  41. This works on my A3000 running WB2.04 (it won't run on 1.3).  It
  42. should run fine on a 68000 machine.  CELP is the best choice, if you
  43. have one of the Zyxel Plus or S models.  ADPCM2 is really good enough
  44. for most purposes (I use it all the time).
  45.  
  46. AREXX IS REQUIRED!
  47.  
  48. LIMITATIONS: As of this time, there is no CELP decoder.  Therefore,
  49. you cannot play back any files that have been recorded with the CELP
  50. compression method.  I strongly suggest that you stick with ADPCM2
  51. until this is fixed.  ADPCM3 also doesn't seem to work reliably, even
  52. on accelerated machines.  I really can't figure out what's wrong -- my
  53. theory is that the Zyxel modem's buffer gets overrun if the Amiga
  54. can't stop sending stuff fast enough.  Or, the Amiga just can't send
  55. stuff fast enough.  I don't know.  UPDATE: Lance just told me that
  56. with the 6.00 roms, ADPCM3 works for him (90% of the time).
  57.  
  58. WARNING:  Do not mix compression levels for different files.  You should
  59. always use just one compression type.  For example, when using CELP,
  60. don't record any of the outgoing messages using ADPCM2.  The same
  61. goes for ADPCM3.  The reason for this is that the current version
  62. of ZVM hangs up the line when switching compressions.  The 6.00 ROMS
  63. don't seem to like the way I was doing the switching before, which
  64. caused incompatibility problems, so I switched to the old way of
  65. dropping the line, switching compressions, then picking up the line
  66. again.
  67.  
  68. My modem's ROM is 5.02.  Anything higher should work.  Type in ATI0 or
  69. ATI1 in some terminal program to find out what ROM version you have.
  70. As of 5.02 (what I have), the decoding of the touch tones is not very
  71. reliable.  Hence, you need to press the keys for a long time before
  72. the modem recognizes them.  I've been told that the higher ROM
  73. versions work much better.
  74.  
  75. This version uses Topaz 8, since many people complained about the HUGE
  76. window sizes.
  77.  
  78. AUTHOR
  79.  
  80. This program was written and Copyright (C) 1993 by Al Villarica of
  81. BuglesSoft.  This software is freely distributable.  You can give this
  82. program away to anyone, but make sure the distribution is complete.  Also,
  83. you cannot charge more than a copying fee for the program.
  84.  
  85. I can be reached at:
  86.  
  87. rvillari@cat.syr.edu
  88.  
  89. or
  90.  
  91. Al Villarica
  92. 104 Roney Lane, #22
  93. Syracuse, NY 13210
  94.  
  95. If you are requesting newer versions of the program by mail, make sure
  96. you include a diskette, your address, the version number you already
  97. have, and MONEY to cover the cost of shipping the disk back (for those
  98. in the US, a self-address stamped envelope with enough stamps for the
  99. disk is fine).  I'm not sure what kind of payment people outside the
  100. US can send, but make sure I can cash it in a US bank and there's
  101. enough money left after cashing it to send the disk back.  Reason?
  102. Since I earn nothing from this program, I would like to not have to
  103. spend for it either.
  104.  
  105. NOT BUGLESS?
  106.  
  107. Please send any bug reports or features you would like included to
  108. either address (Email is faster).  Here is a bug report template to
  109. help you:
  110.  
  111. ZVM Version: 1.19
  112. Zyxel ROM version: 6.00
  113. Machine:  A3000
  114. Chip RAM: 2MB
  115. Fast RAM: 2MB
  116. CPU: 68030
  117. Compression Used: ADPCM2
  118. Status:  RING
  119. Errors:  CONNECT
  120. What you were doing when it happened:  I just clicked on the play gadget
  121.     in the play window.
  122. Problem or Suggestion:  Program can't play back files.  Make window
  123. smaller.  blah blah blah
  124.  
  125. Note:  The Status and Errors fields above should be copied directly from
  126. the Status and Errors fields in the main window of ZVM.
  127.  
  128. ACKNOWLEDGEMENTS
  129.  
  130. Mike Sinz for SimpleRexx and Enforcer
  131. Jan van den Baard for GadToolsBox 1.4 (The Sequel)
  132. Dr. Greg Perry of GPSoft for GPFax
  133. SAS for SAS/C
  134. David Gay for Emacs port
  135. ZyXEL for their modem and the conversion routines from ADPCM2/3 to something
  136. Commodore Amiga for their iff routines
  137. Dave Schreiber for DSound (included with this release without permission
  138.     but since it was public domain, and I included the .doc file,
  139.     and I acknowledged the author, maybe it's alright.  If not,
  140.     someone tell me and I'll kill it from the archive.)
  141. David Junod for FindLine
  142.  
  143. BETA TESTERS
  144. Lance Gibb
  145. Michael Breger
  146. Dirk Melchers
  147. James Atwill - thanks for the asl code!
  148. Christian Stelter
  149. Florian Keck - thanks for the icon!
  150.  
  151. GETTING UPDATES
  152.  
  153. ZVM is a program that continually grows.  From the first version (1.0),
  154. I've added so many new features.  I would like everyone to have the
  155. latest version.
  156.  
  157. For German users, Christian Stelter has volunteered to make updates
  158. available through fidonet.  He says that the following info. is all that
  159. is needed to get the latest version:
  160.  
  161.     DEEP THOUGH BBS 2:241/2013.0
  162.     MAGIC ZVM
  163.  
  164. Or, I will be uploading the latest version to one of the aminet sites,
  165. so it should be available within a couple of days after uploading on
  166. any of its mirrors.  I know of two aminet sites:
  167.  
  168.     oes.orst.edu
  169.     amiga.physik.unizh.ch
  170.  
  171. I will also try to ship the latest versions to the Fish disks.
  172.  
  173. -------------------------------------------------------------------------------
  174.  
  175. A.  Setting up
  176.  
  177. 1.  Unarchive the archive.  Assign voice: to the directory which contains
  178. ZVM.  You will need to put this ``assign'' into your user-startup file.  You
  179. will also need to assign voicetemp: to some scratch directory.  voicetemp:
  180. is where ZVM will put a temporary file when it plays a ZVM file through
  181. the Amiga's sound system.  If you've got lots of RAM, assign voicetemp: to
  182. ram:
  183.  
  184. Ex:
  185.  
  186. assign voice: work:zvm
  187. assign voicetemp: ram:
  188.  
  189. 2.  Run GPFax and go into the options menu and make sure that it is
  190. set up to be in SHARED serial mode.  You also need to go into the
  191. ENVIRONMENT window and change the modem initialization string.  It
  192. probably currently reads AAT&FE0...Remove the &F.  This is because
  193. the &F hangs up the modem, and, at the time we issue a RECFAX to
  194. GPFax, the modem is already ON-HOOK.  You don't want it to hang up and
  195. then pick it up again (on some phones, this could be treated as a
  196. flash, causing it to switch to another "line").
  197.  
  198. 3a.  To run the program, get into a CLI shell and type the following
  199. (or put it in a script).  The script zvmandgpfax assumes that there is
  200. an assign called gpfax: which points to the directory where the GPFax
  201. executable resides.
  202.  
  203. cd voice:
  204. execute zvmandgpfax
  205.  
  206. 3b.  Arguments to ZVM
  207.  
  208. zvm [serialdevice unitnumber]
  209.  
  210.   - serialdevice is the name of the serial device you want
  211.  
  212.   - unitnumber is the unit number of the serial device you want
  213.  
  214. If you don't specify the serialdevice and the unitnumber,
  215. "serial.device" and 0 are assumed, respectively.
  216.  
  217. 3c.  Click on the zvm icon or the zvmandgpfax icon to start ZVM.
  218. zvmandgpfax will first load gpfax (you need to make an assign for gpfax:),
  219. put it in unlisten mode, then it will run ZVM.
  220.  
  221. 4.  CUSTOMIZE your program by recording the appropriate outgoing
  222. messages.  You need to click on the Setup gadget to get into the Setup
  223. Window.
  224.  
  225. -------------------------------------------------------------------------------
  226.  
  227. B.  Buttons:
  228.  
  229. Voice Module Window
  230.  
  231. 1.  Calls tells you the number of messages you have waiting.  Faxes
  232. tells you the number of fax attempts.  Saved tells you the number
  233. of saved messages you have.  The CLR gadgets beside the fax status
  234. clears the fax log.  You need the Fax CLR button because ZVM only
  235. tells you the number of faxes that came in.  You need to view the
  236. faxes through GPFax.  LIMITATION -- you can have up to 45 entries in
  237. each of the logs.  Any more than that and the program will throw away
  238. the top of the list, one at a time.
  239.  
  240. 2.  Play (beside Calls) - Plays the incoming messages over the telephone
  241. line, the Amiga's sound system, or the modem speaker
  242. Another window will pop up that allows you to.
  243.  
  244. 3.  Play (beside Saved) - Playes the saved messages over the telephone
  245. line, the Amiga's sound system, or the modem speaker.  Another
  246. window will pop up to tell you what to do next.
  247.  
  248. 4.  Rings - Shows you the number of rings the program is waiting for.
  249. Use the Setup window to change this.
  250.  
  251. 5.  Comp - Shows you the current compression that will be used for
  252. new messages.
  253.  
  254. 6.  Status - This status box shows you some status information.  Normally,
  255. it tells you what the program is doing.
  256.  
  257. 7.  Errors - Tries to show you the commands sent to the modem and the
  258. results read.  It also gives you the last error, if any.
  259.  
  260. 8.  Setup - Click on this to get into the setup window.
  261.  
  262. 9.  Answer Fax - If you have GPFax2.21 or greater, this will let it answer
  263. the call as a fax.
  264.  
  265. 10.  Answer Call - Force the modem to answer the call as an automatic
  266. voice/fax machine.
  267.  
  268. 11.  Record Conv - Records the conversation and puts it in the Saved log.
  269.  
  270. 12.  Unlisten - Puts the program in unlisten mode.
  271.  
  272. 13.  Close Serial - Closes the serial port so other programs can use it.
  273.  
  274. 14.  Quit - Quit.
  275.  
  276. Play Window
  277.  
  278. 1.  Play - Plays the message displayed on the bottom line.
  279.  
  280. 2.  Archive - Transfers the selected message to the Saved log.  If you're
  281. already in the Saved log, this just moves the marked entries to the bottom.
  282.  
  283. 3.  Delete - Marks the message for deletion.
  284.  
  285. 4.  Save IFF - Saves the message as an IFF file.  An ASL requester pops
  286. up to ask you for a file name.  Try not to save anything in the voice:voicein
  287. or the voice:voices directory with a ".iff" extension (they will be deleted
  288. automatically).
  289.  
  290. 5.  Done - Commits the changes you requested (delete or archive).
  291.  
  292. 6.  DClick= - You can double click on the list view items.  This tells ZVM
  293. what the double click means.
  294.  
  295. 7.  To - The output device you want to play your file through.
  296.  
  297. Every time you delete or archive something, it is marked with an 'a'
  298. or a 'd' respectively.  You can 'undelete' or 'unarchive' them by
  299. clicking on Archive or Delete respectively (in other words, they are
  300. toggles).  Only when you click on Done are the changes committed.  To
  301. make things easier for you, there's a DClick= cycle button.  Any time
  302. you double click on one of the listview items, the action displayed in
  303. this button is performed.  This way, you can quickly delete a bunch of
  304. messages by clicking on DClick= until it says "Delete", then double
  305. click on all the messages you want to delete.
  306.  
  307. Setup Window
  308.  
  309. 1.  Threshold - This adjusts the modem's silence detection threshold.  A
  310. high value means that the modem treats noisier conditions as "silence".  A
  311. low value means that the modem treats quieter conditions as "silence".
  312.  
  313. 2.  Length - The number of seconds required for the modem to be detecting
  314. "silence" before it actually reports it.
  315.  
  316. 3.  Comp - Select the compression you desire.  ADPCM2 uses less disk space
  317. and computing resources.  This is the preferred setting, unless you
  318. have CELP.  ADPCM3 won't run on an unaccelerated Amiga.
  319.  
  320. 4.  Rings - Click on this for the desired number of rings you want before
  321. I will answer the call.  "Toll Saver" will let the modem answer in 2 rings
  322. if there are messages, and 4 rings if there are none.
  323.  
  324. 5.  Rec Length - The max. recording time for incoming calls
  325. and outgoing messages.  Record Conv has a maximum of 3 minutes.
  326.  
  327. 6.  Amiga Vol - The volume you want when playing messages through the amiga
  328. sound system.
  329.  
  330. 7.  Quiet Modem - Issues an AT&FL0 if checked, otherwise, it sends an AT&F.
  331.  
  332. 8.  Beep Cmd - An Arexx command you want sent when you have messages.  The default
  333. should be:  alertmessages
  334.  
  335. 9a.  Fax Cmd - An Arexx command you want sent when the modem detects a fax
  336. tone or the caller manually requests a fax.  Also see Has Fax option.  The
  337. default should be:  handlefax
  338.  
  339. 9b.  Has Fax - Check this if you have a fax program and you want the
  340. Fax Cmd to be sent when faxes are requested.
  341.  
  342. 10.  Password - Enter a 4 digit password (it has to be 4 digits!) for
  343. accessing the messages from another telephone.
  344.  
  345. 11.  Record - Records a message. An ASL file requester pops up to ask you
  346. for a filename.
  347.  
  348. 12.  From - Select external mic or telephone line.  On Zyxels, you can
  349. connect a telephone handset to the "Line" input of the modem.  Then,
  350. you can speak into the "EAR" phone and use it like an External Mic.
  351. WARNING: Don't use the External Mic option when the modem is plugged
  352. into the phone line!
  353.  
  354. On my system, the modem and a telphone are plugged in parallel.  You should
  355. be able to hear a dial tone even if the modem picks up the line.
  356. When recording over the telephone line, I suggest you press one of the
  357. telephone keys to get rid of the dial tone first!  When you're done
  358. recording, click on the Stop gadget that pops up.  See section
  359. "Messages to customize" at the end of this documentation file.
  360.  
  361. 13.  Play - Plays the message named by the Message cycle gadget
  362. through the telephone line or the modem speaker.
  363.  
  364. 14.  To - Select modem speaker, telephone line, or the Amiga's sound
  365. system.
  366.  
  367. 15.  Zip Window - Check this if you want the program to automatically
  368. start up in Zipped form (effectively clicking on the zoom gadget for you).
  369.  
  370. 16.  Snd Cmd - An arexx command that is sent when you try to play
  371. a message through the amiga sound system.  The default is
  372. playamiga.
  373.  
  374. 17a.  Call Cmd - An arexx command that is sent when ZVM answers a call.
  375. The default is handlecall.
  376.  
  377. 17b.  ARexx on Call - Check this if you want to handle calls via arexx.
  378. At this time, the arexx program I wrote (largely a duplicate of the C
  379. code) is not tested completely.  I've tested most features but there's
  380. always a possiblity that there are bugs.  When it is completely tested,
  381. I will REMOVE the C equivalent.
  382.  
  383. 18a.  SA Rings - The minimum number of rings required before ZVM will
  384. consider a call to be answerable by the silent answer capability.  See 18b.
  385.  
  386. 18b.  SA Cmd - An arexx script that is called in "Silent Answer" mode.
  387. Currently, the script is very small and simple.  And, it's not really silent.
  388.  
  389. "What is silent answer?", you ask.  When someone calls you up and you're 
  390. at home AND ZVM is active AND the minimum number of rings is seen by ZVM,
  391. ZVM will pick up the phone and run the arexx command specified by the 
  392. SA Cmd field in the setup window.  This allows you, for example, to have
  393. a simple kind of remote transfer capability provided by most faxes.
  394. For example, supposing someone calls you up and you pick the phone up.
  395. Then, he says that he wants to send a fax.  Without silent answer, you
  396. would have to get out of bed, go to your trusty Amiga, and click on
  397. Answer Fax in the ZVM window.  With silent answer, you would just
  398. have to press 2 on your touch tone phone.  Or, if the modem hears the
  399. fax tone, it will automatically start up the fax program.
  400.  
  401. Note that silent answer gets activated only if you pick up the phone
  402. before ZVM does.  If ZVM picks up the phone when it hears the number
  403. of rings specified by the Rings gadget, it will answer the phone using
  404. the Call Cmd arexx script, not the SA Cmd arexx script.  If you want
  405. to disable the silent answer feature, just set SA Rings to a number 
  406. greater than or equal to the number in the Rings gadget.
  407.  
  408. "What does the current SA Cmd do?", you ask again.  I said the current
  409. version of handlesilentanswer.zvm does very little.  It first beeps
  410. a short high pitched tone (so you know ZVM is alive and kicking), then
  411. does nothing but wait for one of two events.  You could press the number
  412. 2 and ZVM will activate the fax program.  Or, if ZVM hears the fax tone,
  413. it will start the fax program automatically.  It will only wait for
  414. these two events for a maximum of 30 seconds.  If none of those events
  415. occurs, it will beep again and hang up.  If someone wants to add to the
  416. current script, please do so.  Another nifty feature might be to record
  417. the incoming call when you press 1 or something.  Basically, you can
  418. do anything you want.
  419.  
  420. WARNING: You should only use silent answer if the telephone you use to
  421. pick up the phone is in parallel with the modem.  Otherwise, you would
  422. get cut off if the Zyxel answers the phone when processing the silent
  423. answer script.  SA Rings is set at 2 by default.  This means that it
  424. is most likely ACTIVE! (assuming of course that Rings is higher than
  425. this).
  426.  
  427. 19.  Done - Click on this when you're done fiddling with the setup window.
  428.  
  429. -------------------------------------------------------------------------------
  430.  
  431. C.  Calling from the outside:
  432.  
  433. When a person calls from the outside, ZVM will give instructions on
  434. what to press.  It asks him to press 2 to send a fax or "wait for the
  435. beep...".  At this time, he can also press 9 to retrieve his messages.
  436. It's a hidden option most callers don't need to know.  Note that if he
  437. turns off the Has Fax option, it will not accept 2 at this time.
  438.  
  439. He can also press 9 to receive his messages or 2 to send a fax while
  440. the program is recording a message!  But, anything prior to pressing
  441. those numbers counts as a message.  This way, someone can leave a
  442. message explaining a fax, and then send the fax.
  443.  
  444. After the caller leaves his message and hangs up, the modem will keep
  445. on recording until it hears "silence", a busy tone, or a phone
  446. keypress.  If it doesn't hear any of those, it will record for up to
  447. 50 seconds.  You can set the max. recording time using the parameters
  448. described above.  If your phone system doesn't go into silence
  449. or a busy tone when a caller hangs up, just ask him to press the '*'
  450. symbol after leaving a message.  This signals the program to stop
  451. recording and issue the "Goodbye" message.
  452.  
  453. If you press 9, you will be instructed to enter a 4 digit password.
  454. If it matches the Password string gadget in the setup section, you will
  455. be granted access.  After each message is played, you will then be asked
  456. to either 1) delete the message, 2) keep it and go onto the next one, or
  457. 3) play it again.
  458.  
  459. -------------------------------------------------------------------------------
  460.  
  461. D. AREXX port:
  462.  
  463. The AREXX port is called VOICEMAIL1.
  464.  
  465. Commands while program is waiting for calls:
  466.  
  467. 1a.  UNLISTEN - Make the program not listen to the serial port.  This is
  468. useful if you want to run a term program but don't want to quit ZVM.
  469.  
  470. 1b.  CLOSESERIAL - Close the serial port.
  471.  
  472. 2a.  LISTEN - Only valid when the program is UNLISTEN'ed.
  473.  
  474. 2b.  OPENSERIAL - Open the serial port.  Only valid when the program has
  475. actually closed the serial port.
  476.  
  477. 3.  QUIT - Quit.
  478.  
  479. 4.  ANSWERFAX - Force ZVM to answer the call as a fax.
  480.  
  481. 5.  ANSWERCALL - Force ZVM to answer the call as an automatic voice/fax machine.
  482.  
  483. 6.  RECORDCONV - Record conversation
  484.  
  485. 7.  PLAYINCOMING - Same as clicking on the Play Incoming gadget in the
  486. Voice Module window.
  487.  
  488. 8.  PLAYARCHIVE - Same as clicking on the Play Archive gadget.
  489.  
  490. I use dnet a lot, so I have this simple script that works for me:
  491.  
  492. failat 20
  493. sys:rexxc/rx >nil: <nil: "address voicemail1 unlisten"
  494. dnet >nil: nil: -X -Z2      ;<---put your dnet parameters here
  495. wait >nil: <nil: 5
  496. sys:rexxc/rx >nil: <nil: "address voicemail1 listen"
  497.  
  498. ---------------------------------------------------------------------------------
  499.  
  500. Commands while program is answering a fax, answering a call, or in unlisten mode.
  501.  
  502. Some things you should know:  Most of the functions return a status
  503. (status.keyDetected, status.faxDetected, etc.) if they aborted for some
  504. reason.  For example playVoice will return status.keyDetected if, while
  505. playing a file, the user presses a DTMF key.  Anyway, the best way
  506. to learn how to program ZVM is by looking at the examples in handlecall.zvm
  507. and handlefax.zvm.  Or, ask me.
  508.  
  509. Note:  Each function you create needs to 'EXPOSE status. mode.'  You will only
  510. need to do this if you use the PROCEDURE keyword.
  511.  
  512. YOU SHOULD NOT ACCESS ZVM BY SENDING AREXX COMMANDS TO ZVM ITSELF.
  513. INSTEAD, USE THE AREXX FUNCTIONS (STUBS) TO COMMUNICATE WITH ZVM.
  514. HERE IS A LIST OF FUNCTIONS:
  515.  
  516. playVoice(fileName)
  517.     Plays fileName over the telephone line.  Stops if the user presses
  518. a DTMF key.
  519.  
  520. recordVoice(fileName)
  521.     Records fileName with the same settings as in the Setup window (length
  522. of message, silence detection levels, etc.)
  523.  
  524. presentMenu(numberOfKeys, choiceFileName, badChoiceFileName, timeOut,
  525.     validChoices, numBadChoicesAllowed)
  526.     This presents a simple menu to the caller.  numberOfKeys is the
  527. number of keys that makes up a good choice.  choiceFileName is the name
  528. of the file for the menu.  badChoiceFileName is the name of the file
  529. that will be played if the user enters a bad choice.  timeOut is the
  530. number of seconds before playing the choiceFileName again.  validChoices
  531. is a string of characters which are valid choices.  numBadChoicesAllowed
  532. is the nubmer of bad choices or timeouts presentMenu will allow before
  533. exiting.  This is an AREXX script.  It's a good example of how to do things.
  534.  
  535. password()
  536.     Returns the password in the setup window.
  537.  
  538. hasFax()
  539.     Returns 1 if the hasFax option in the setup window is checked.
  540. 0 otherwise.
  541.  
  542. playBeep(tone1, tone2, duration)
  543.     Beeps 2 tones.  Put a 0 for tone2 if you don't want two
  544. simultaneous beeps.  duration is in tenths of seconds, I think.
  545.  
  546. readNKeys(numKeys, timeOut)
  547.     Reads numKeys DTMF characters or times out.
  548.  
  549. read1Key(timeOut)
  550.     Reads 1 DTMF character or times out.
  551.  
  552. readKeysUntil(terminatingCharacter, maxCharacters, timeOut)
  553.     Reads a DTMF sequence, up to maxCharacters or until it
  554. gets the terminatingCharacter (0..9, * or #) or until
  555. a timeout occurs.
  556.  
  557. readLine(timeOut)
  558.     Reads a string from the modem.  timeOut is in seconds.  This returns
  559. the string in line (not RESULT).
  560.  
  561. writeLine(line)
  562.     Writes out a newline terminated string to the modem.
  563.  
  564. flushPhoneBuffer()
  565.     ZVM maintains a small buffer for incoming phone key presses.  For example,
  566. if you're playing a voice file and the user presses a DTMF key, it gets put in
  567. the phone buffer.  Sometimes, you will want to ignore that keypress.  So, call
  568. this function.
  569.  
  570. listen()
  571.     Should be the last thing in your script for a normal return.  This
  572. will make ZVM start listening for RINGS again (and hang up the line).
  573.  
  574. dropLine()
  575.     Hangs up the phone and puts the modem in a state that accepts AT commands.
  576.  
  577. atCommands()
  578.     Doesn't hang up the phone, but puts the modem in a state that accepts AT
  579. commands.  Ideal for receiving faxes while the line is still up.  BUT, if
  580. you try to playvoice or use any of the voice commands, ZVM WILL drop the line
  581. first.  So, there is no way to use the serial port and still maintain a connection.
  582. NOTE that if you use any fax program, it will hang up the line for you anyway.
  583.  
  584. use19200()
  585.     Sets the serial port to 19200, n, 8, 1, 7wire handshaking.
  586. This is needed if you're going to receive faxes.  To get the modem
  587. to 'sync' to the new speed, the modem should be ready to accept AT commands
  588. (either by using dropLine() or atCommands()) AND you should send it
  589. at least one AT command.
  590.  
  591. answerFax()
  592.     Lets ZVM answer a fax.  This eventually calls another arexx script
  593. called handlefax.zvm.  But, don't call that script yourself.  ZVM does
  594. special magic before calling that script.
  595.  
  596. cTime()
  597.     Returns a C compatible time (number of seconds since Jan 1, 1970).
  598. This is what you need to feed into the addLogEntry(...) function call as
  599. the actualTime parameter.  This should be the time the call came in.
  600.  
  601. addLogEntry(fileName, actualTime, duration)
  602.     ZVM maintains a log for incoming calls.  fileName is the name
  603. of the file that you recorded the incoming call as.  actualTime is a
  604. C compatible time when the call came in.  duration is the length of the
  605. incoming call.
  606.  
  607. setLogEntryStatus(logEntryNumber, logEntryStatus)
  608.     Allows you to change the status of a log entry.  Possiblities
  609. for logEntryStatus are 'd' = delete, 'a' = archive, and ' ' = do nothing.
  610.  
  611. getLogEntryData(logEntryNumber)
  612.     Gets the data associated with a log entry number.
  613.  
  614. getLogEntryFileName(logEntryNumber)
  615.     Gets the filename associated with a log entry number.
  616.  
  617. getNumVoiceMessages()
  618.     Gets the number of messages in the incoming log.  You should
  619. make sure that you don't try to access (via the setLogEntryStatus,
  620. the getLogEntryFileName, or the getLogEntryData) out of bounds.  Note that
  621. this is 1 higher than the maximum you can access.  If there is 1 message
  622. waiting, this function will return 1, but you can get data or set data
  623. as log entry 0 (C style).
  624.  
  625. displayError(error)
  626.     This displays the string in the Errors field in the main window.
  627.  
  628. displayStatus(status)
  629.     This displays the string in the Status field in the main window.
  630.  
  631. setLastError(status, error)
  632.     This should be one of the last things in your script.  It will
  633. probably bring up a timed window displaying the error.  status should
  634. be status.normal, status.keyDetected, status.quietDetected, 
  635. status.silenceDetected, status.faxDetected, status.busyDetected,
  636. status.timedOut, status.signalDetected, or status.error.  The stem status.
  637. is defined for you by the doInitializations function which is called
  638. at the beginning of handlecall.zvm.  This effectively does a listen() also.
  639.  
  640. -------------------------------------------------------------------------------
  641.  
  642. E.  Messages you have to customize:
  643.  
  644. YOU NEED TO TYPE THESE MESSAGES INTO THE FILE REQUESTER EXACTLY AS WRITTEN.
  645.  
  646. Here are the things you need to say when recording these messages in
  647. the Setup Window.
  648.  
  649. 1.  Wait for Beep = "This is ???-????.  Press 2 to send a fax or wait for
  650.     the beep then leave your message.  Press the * symbol to end your
  651.     call."
  652.  
  653. or, if you used the NOFAX option,
  654.  
  655.     "This is ???-????.  Wait for the beep then leave your message.  Press the *
  656.     symbol to end your call."
  657.  
  658. 2.  Retrieve or Fax = "Press 2 to send a fax or 9 to retrieve your messages."
  659.  
  660. or, if you used the NOFAX option,
  661.  
  662.      "Press 9 to retrieve your messages."
  663.  
  664. NOTE:  This message gets played if the caller presses a key that doesn't
  665. activate any function.  You may choose to not mention the "9" key (put
  666. in something funny like "What do you think this is, a voicemail system?").
  667. Do what you like.
  668.  
  669. 3.  Enter Password = "Enter your 4 digit password."
  670.  
  671. 4.  Bad Password = "You entered a bad password."
  672.  
  673. 5.  Play or Delete = "Enter 1 to delete this message, 2 to keep it, or 3 to play
  674. it again, or the * symbol to end your call."
  675.  
  676. 6.  Timed Out = "You exceeded the time limit for entering your choice."
  677.  
  678. 7.  Bad Choice = "You entered a bad choice."
  679.  
  680. 8.  No Message = "There are no more messages."
  681.  
  682. 9.  Goodbye = "Bye now!"
  683.  
  684. ----------------------------------------------------------------------------------
  685.  
  686. F.  Iff2Adpcm:
  687.  
  688. This is a program which converts an iff 8svx file to something playable
  689. by ZVM.  To invoke it, type in
  690.  
  691. iff2adpcm ifffilename 2 zvmfilename /* adpcm2 */
  692.  
  693. or
  694.  
  695. iff2adpcm ifffilename 3 zvmfilename /* adpcm3 */
  696.  
  697. Note that it doesn't do any massaging of sampling rates.  ZVM plays
  698. stuff back at 9600 samples per second.  Therefore, if your samples are
  699. sampled around that sampling rate, it should play back fine.  If it's
  700. sampled at 19200, it would play back sloooow on the Zyxel.  If it's
  701. sampled at 4800, it would play back fast.  Maybe in a future version,
  702. I will try to make adjustments in the sampling rate by interpolation
  703. or extrapolation.  Maybe.
  704.  
  705. ----------------------------------------------------------------------------------
  706.  
  707. To Do
  708.     - Set process up so that disk-full errors go away quietly and not
  709.         bring up a stupid requester
  710.     - Make a scheduler and maybe a log for that scheduler.
  711.     - Integrate faxes with calls.  This will require an update
  712.         to the Messages window, among other things.
  713.     - Add the ability to put in comments, caller id, telephone numbers,
  714.         and callback numbers.
  715.     - Tutorial for making a voicemail program
  716.     - Make the iconified thing at the same coordinates as the actual
  717.         program.  Save it across invocations!
  718.     - Maybe switch to zyxel's format.  Shouldn't be too hard.  Could write
  719.         a converter instead.  ZVM's format is VERY simple.  The first
  720.         byte is the compression.  The rest is the data.  1 = CELP,
  721.         2 = ADPCM2, and 3 = ADPCM3.
  722.     - Maybe send out the program with LINE debugging on to help us track
  723.         down enforcer hits reported by other people (so far, no one
  724.         has reported enforcer hits)
  725.     - Make the receive buffer user-programmable so that there is a smaller
  726.         chance for buffer overflow for non-accelerated machines
  727.     - Find out why zvm doesn't work with duart.device
  728.     - Add voicein: and voices: assigns instead of hardwiring voice:voicein
  729.         and voice:voices
  730.     - User customizable date and time format anywhere it is necessary
  731.     - Smaller 'iconified' look using the window title for the number
  732.         of messages and number of faxes
  733.     - Use GPFax's viewfax for viewing incoming faxes.  Needs to query
  734.         GPFax for the name of the fax file when we receive an incoming
  735.         fax.  This needs more thought since it may lock us into
  736.         a particular fax program
  737.     - Try to highlight things in the list view for playing messages
  738. possible- Add a random button which will pick at random from a set
  739.         of messages
  740. possible- Play back the message's time and date
  741.     - Caller ID (can't work on it until Syracuse gets CID!)
  742. done    - Use a file requester instead of hardwiring the Save IFF option
  743. done    - Use a file requester for recording customizable messages
  744.         so we can easily add more kinds of messages
  745. done    - User selectable max. recording time
  746. done    - User selectable silence detection time and silence detection level
  747. done    - Better UI for accessing the messages (use a ListView gadget)
  748. done    - Decoder for ADPCM2 and Encoder
  749.     - Figure out what's wrong with ADPCM3
  750. done    - Work with other FAX programs
  751.     - Work better with workbench and tooltypes
  752. done    - Add '*' as an option to end a call
  753.     - Add '1' as an option to kill initial message for 'regular' callers
  754.     - Poor man's CID - maybe we can also ask
  755.         for the caller's phone number at that time!
  756.     - Automatic delivery of messages
  757.     - Scheduling of messages to go out
  758.     - Maintenance mode from outside
  759. done    - Allow DTMF keys to run AREXX scripts.
  760. done    - Archive messages
  761. done    - Import/Export IFF files
  762. done    - Record conversation
  763. done    - If someone picks up the phone before ZVM does, it should also pick
  764.         it up to see if the caller wants a fax, etc.  In other words,
  765.         it should support some kind of remote transfer (or silent
  766.         answer).
  767.     - Distinctive ring
  768. done    - Use AREXX to allow heavy customization of answerCall()
  769.     - Allow caller to enter his phone number and time of desired return call (aside
  770.         from CID)
  771.     - Blocking of messages via CID (if you don't want to receive messages from
  772.         particular callers, or area codes, etc.)
  773.     - VOICEMAIL
  774. done    - AREXX command when there are messages/faxes waiting (instead of just beeping)
  775. done    - Beep only if there is a new call (i.e. stop beeping when the person presses
  776.         Play messages).  Use Archive to achieve this effect.
  777.     - Possibly add a comment field for messages (especially useful when
  778.         we put in the archiving facility)
  779. done    - silent modem
  780.     - when timedout during recording of call, perhaps mention to the
  781.         caller that they exceeded the max. recording time and can ask
  782.         them to press a key to record another message.
  783.  
  784. HISTORY
  785.  
  786. V1.19    - Fixed a bug in the arexx scripts.  I inverted dropLine and atCommands.
  787.     - Fixed a bug (potential) that may cause ZVM to crash if you abort
  788.         the handlecall.zvm or handlesilentanswer.zvm.
  789.     - Fixed a bug that didn't cause playvoice to return any indication
  790.         of why it was aborted manually
  791.  
  792. V1.18    - Fixed a small bug that didn't allow you to decode an adpcm2 file and
  793.         then decode an adpcm3 file
  794.     - Switched to using a SendARexxMsg instead of a SendSynchronousARexxMsg
  795.         for doing the playamiga.zvm stuff.
  796.     - Turned on heavy optimization for adpcm2raw.c, hopefully making it
  797.         much faster.
  798.     - Added more arexx functions to deal with the modem (dropLine, atCommands,
  799.         use19200)
  800.  
  801. V1.17    - Using EASYSENDFUNCTION (for testing with duart.device) -- need to make
  802.         sure it still works 99% of the time with adpcm3 and 6.00 roms.
  803.     - Fixed a problem of playing back stuff when calling from the outside.
  804.         There may be a feedback path from an outgoing message back
  805.         to the modem's detection circuitry.  So, a recorded voice file
  806.         may cause the modem to hear things like a fax tone or a DTMF
  807.         key press.
  808.     - Fixed the deletion of messages when accessing stuff from the outside (this
  809.         is in handlecall.zvm)
  810.     - 38400 for adpcm3.  Need to make sure it still works.  Otherwise,
  811.         switch back to 57600.
  812. V1.16    - Now I save the path and file of the asl requester (but not across
  813.         ZVM invocations).
  814.  
  815. V1.15    - Added silent answer capability.
  816.     - Changed the way the sound is done again.  Lance complained about
  817.         thrashing disks, so now I made a new assign required (voicetemp:).
  818.         This is where ZVM will put the temporary file it creates while
  819.         playing stuff on the amiga.  You can assign voicetemp: to ram:t
  820.         if you think you'll have enough memory for the converted file.
  821.         Otherwise, putting it on your hard disk is fine too.
  822.  
  823. V1.14    - Added close serial port
  824.     - Changed to a different format for voice files (again).  Sorry.  But,
  825.         with the new format, playing is much safer (in terms of
  826.         interruptability).  You can use the convertold program
  827.         to convert your old voicefiles to the new format.
  828.     - Renamed cliloadzvm to zvmandgpfax
  829.     - Removed cliloadzvmnofax.  You can just run zvm directly
  830.     - You can now run zvm and zvmandgpfax from the workbench.  Thanks to
  831.         Florian Keck for providing the icon.
  832.  
  833. V1.13    - Fixed the asl requester
  834.     - Fixed playamiga.zvm to handle files with spaces in them
  835.  
  836. V1.12    - LOTS OF NEW FEATURES
  837.     - Changed the way we play messages.  We now use a standard IFF player.
  838.         But, it doesn't look as nice as before but is good enough for
  839.         now.  I did this because someone complained about ZVM eating
  840.         too much memory when converting the compressed voice into
  841.         something playable (or IFF files).  See the playamiga.zvm script.
  842.         Also note that when you click on Done in the Setup window,
  843.         the ARexx script 'clean.zvm' is run to clean up the voice:voices
  844.         directory of all the '.iff' files.  The same thing is true of
  845.         the Done gadget after playing Saved or New messages.  In that
  846.         case, the 'clean.zvm' script cleans up the voice:voicein
  847.         directory.  This was needed so we don't have to keep track
  848.         of the '.iff' files we create when playing through the amiga
  849.         sound system.  And, ZVM won't have to keep decoding and saving
  850.         the '.iff' file equivalents of the files you want to listen to.
  851.     - Now you can customize the handling of incoming calls.  See the
  852.         handlecall.zvm script.
  853.     - Now you can customize the handling of incoming faxes.  See the
  854.         handlefax.zvm script.
  855.     - You can customize the way ZVM alerts you of new messages or faxes.  See
  856.         the alertmessages.zvm script.
  857.     - I removed the Message cycle gadget in the Setup window.  You now
  858.         have to select the messages from an ASL file requester when
  859.         playing or recording.  I need to put in dummy files (which
  860.         will not be playable) so that you don't have to manually type
  861.         in the file names of voice files our program expects.
  862.  
  863. V1.11    - Found a problem relating to closing down IDCMPs (I cached signal bits of
  864.         windows and closing down the IDCMP of a window caused those
  865.         signal bits to become invalid).
  866.     - Does not abort playing messages in the middle of a block.  I also check
  867.         to make sure there are complete DLE DLE pairs (not just one pair
  868.         at the end, but possibly multiple pairs).  This could be a good
  869.         reason to switch over to a zyxel format (where DLEs are not
  870.         stored in pairs and you have to decode it before sending it).  That
  871.         would always send complete pairs of DLEs.
  872.  
  873. V1.10    - Made windows smaller
  874.     - Fixed some bugs when someone interrupts a playVoice by sending
  875.         a fax or pressing a key.  It will send complete DLE DLE
  876.         pairs now.
  877.  
  878. V1.9    - Fixed some bugs with the Archived number status
  879.     - Changed timer code to not do a CheckIO, although I think it is safe.
  880.         But, someone reported that it crashes when this check is made.
  881.         Need to verify this.
  882.  
  883. V1.8    - Added all the nifty features above.
  884.     - Added Errors line
  885.     - Added Archive feature
  886.     - Added Rings, Comp, and To lines.
  887.     - Removed ability to change the "To" when playing messages.  Everything
  888.         is from the Setup window now.
  889.     - ARexx commands for beeps and faxes
  890.     - Added silent modem.  Issues an ATL0 when program starts up or when
  891.         it comes out of unlisten mode.
  892.     - Added record conv.
  893.     - Added '*' as an option to end a call.  It doesn't say 'you entered a bad
  894.         choice' anymore.
  895.     - You can export a voice file to an iff file.  There is also a CLI
  896.         utility to convert an iff file to a ZVM voice file (adpcm2 and adpcm3
  897.         only).
  898.     - Many more options for configuring the modem in the Setup Window
  899.     - Much nicer way to access the messages
  900.  
  901. V1.7    - Changed to a safer way of handling timer aborts
  902.     - Fixed a bug that didn't report TimedOut while recording
  903.     - Added '*' to mean TimedOut while recording a call or while playing
  904.         back messages through the phone line (external access).
  905.  
  906. V1.6    - Added back ADPCM3
  907.     - You can play ADPCM3 over the Amiga's speaker
  908.     - Fixed the bug that didn't allow you to record a message right after
  909.         playing it over the Amiga's speaker
  910.     - ZVM uses different serial port speeds depending on the compression
  911.         ratio.  I'm not sure if this will make ADPCM3 or CELP work better.
  912.     - Uses different block sizes for different compressions also
  913.  
  914. V1.5    - Changed the interface to GPFax.  It now just uses ARexx instead of
  915.         trying to do the AT+FCLASS=2, blah blah blah.  This requires
  916.         two changes to the GPFax settings though.  You need to remove
  917.         the &F part of the modem initialization string.  This is the first
  918.         step towards making the program OTHER-FAX-friendly.
  919.     - Added cliloadzvmnofax
  920.     - Added back ADPCM3.  You can record in it and play it back through the
  921.         Amiga sound system.  I still can't figure out how to make it play
  922.         back reliably over the modem speaker or telephone line.
  923.  
  924. V1.4    - Added amiga volume parameter
  925.     - Hopefully more robust than 1.3
  926.     - Watch the status line of the main window for some error messages
  927.  
  928. V1.3    - Added playback through the Amiga's sound system
  929.     - Added adjustable silence sensitivity and interval.  This is through
  930.         the CLI arguments.  It's only a stopgap measure until I work
  931.         it into the GUI.
  932.     - Added adjustable recording time.  Also a stopgap measure until I work
  933.         it into the GUI.
  934.     - Had to make all the arguments to the program REQUIRED because I was
  935.         too lazy to have to parse it.
  936.  
  937. V1.2    - Fixed some bugs and made serial routines faster
  938.     - I declare ADPCM3 to not be working.  Don't use it.
  939.     - Changed the way callers are handled.  Should be friendlier to the caller
  940.         now.
  941.     - Puts up a window if it can't open the timers or the serial port
  942.         instead of writing to stdout
  943.     - Now displays the version number on the main window
  944.     - Basically a name change to ZVM instead of VM
  945.  
  946. V1.1
  947.     - Added a different window for Unlisten mode
  948.     - You can now quit in unlisten mode -- you're not stuck there anymore
  949.     - New arguments for starting the program:
  950.         zvm [NOFAX] [devicename unitnumber]
  951.         
  952.         If you start the program with NOFAX (note the capitals),
  953.         the program will not answer faxes.  The caller cannot select
  954.         '2' from the initial menu to force a fax.  In other words,
  955.         the handling of faxes will be disabled by this argument.
  956.     - Added zoom gadget and moved some stuff around in the UI -- when
  957.         you click in the zoom gadget, you get a semi-iconized
  958.         form (actually, it just shrinks the window) which shows
  959.         you the # of incoming calls and faxes.  Note that this is
  960.         just a resized window, so you can type in keys to access
  961.         the functionality without zooming out.  For example, you
  962.         can press the 's' key to access the setup window.
  963.     - GPFax needs to be set on SHARED serial for this combo to work.
  964.  
  965.